perm filename CONS11.DEC[KL,SYS] blob
sn#209145 filedate 1976-04-03 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00069 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00006 00002 .SBTTL CONSOLE PACKAGE FOR KL10/11 INTERFACE, 9-SEPT-75
C00007 00003 $KONSL: TTIBRK GET BREAK CHAR FROM LAST OPERATION
C00009 00004 $$CONSL:CLR RPTFLG
C00012 00005 3$: MOVB #40,$KDCEN+1 MAKE SINGLE LETTER COMMAND
C00014 00006 .SBTTL CONSOLE DISPATCH TABLE
C00017 00007 CLOCK OPERATIONS
C00019 00008 KL10 MONITOR (PROGRAM & ACT10) COMMANDS
C00021 00009 DISPATCH TABLE
C00023 00010 .CS SELECT CLOCK SOURCE
C00024 00011 KL10 MONITOR (PROGRAM & ACT10) COMMANDS
C00026 00012 .SBTTL DIAGNOSIC CONSOLE UTILITY COMMAND PROCESS
C00028 00013 .SBTTL CONSOLE COMMAND REPEAT CONTROL
C00029 00014 .SBTTL PROGRAM CONSOLE COMMAND PROCESS
C00031 00015 PROGRAM INDIRECT CCL FILE PROCESS
C00033 00016 .SBTTL DIAGNOSTIC FUNCTIONS
C00035 00017 DIAGNOSTIC READ AND PRINT
C00036 00018 .DFDP: DFLEGAL FUNCTION LEGAL ?
C00037 00019 .AR: TTICHR
C00038 00020 .BR: TTICHR
C00040 00021 .PC: TTITRM
C00041 00022 .VM: DFLEGAL FUNCTION LEGAL ?
C00042 00023 .FE: TTITRM
C00043 00024 PRINT PRIORITY INTERRUPT FUNCTIONS
C00045 00025 PRINT ALL - C-RAM & REGISTERS
C00047 00026 .SBTTL PDP-10 START/STOP FUNCTIONS
C00049 00027 START PDP-10 DDT
C00051 00028 PULSE THE E-BOX CLOCK
C00053 00029 EXECUTE A PDP10 INSTRUCTION.
C00054 00030 PNTCPU PRINT C-RAM & REGISTERS
C00056 00031 SELECT CLOCK SOURCE
C00057 00032 PROCESSOR PARITY DISABLE
C00058 00033 PROCESSOR PARITY ENABLE
C00060 00034 MICRO-CODE SYNC MARK ROUTINES
C00061 00035 MICRO-CODE TIME FIELD CHANGE ROUTINE
C00062 00036 CACHE ENABLE
C00064 00037 AC BLOCK SELECTION
C00066 00038 4$: PMSG <SELECTED AC BLK >
C00067 00039 START PDP10 AT ADDRESS SPECIFIED AS LOWER 18 BITS OF 36-BIT ARGUMENT.
C00069 00040 31$: SM START MACHINE
C00071 00041 .SBTTL PDP-10 DEPOSIT AND EXAMINE CONSOLE FUNCTIONS
C00072 00042 .EXM: MOV #.DPXAD,R5
C00073 00043 TST R3 DOING MULTIPLE PRINT ?
C00074 00044 MEMORY ZERO
C00075 00045 .SBTTL CONSOLE IDLE RUN LOOP
C00077 00046 MONITOR TELETYPE CHARACTER INPUT
C00079 00047 .SBTTL PDP-10 RUN TIME SUPPORT
C00081 00048 TENCERR:CLR TENRUN
C00083 00049 C10TO: SETFLG
C00085 00050 C10SW: DPOSVT LOAD SWITCHES INTO FROM 11 WORD
C00087 00051 C10PRG: MOV R5,R1 GET CONTROL FIELD
C00088 00052 C10CLK: MOV R5,R1
C00089 00053 C10C2: EXAMT GET WAIT COUNT FROM TO 11 WORD
C00091 00054 PDP-10 SWITCH REGISTER
C00093 00055 .SBTTL PDP-10 PROGRAM COMMAND
C00095 00056 "DIAMON" FILE READ
C00097 00057 .SBTTL PDP-11 CONSOLE FUNCTIONS
C00098 00058 EXAMINE ELEVEN AT ADDRESS GIVEN
C00100 00059 4$: TST R3
C00101 00060 DEPOSIT ELEVEN DATA
C00102 00061 .SBTTL KL10 MONITOR & ACT10 COMMAND ROUTINES
C00104 00062 $AT: TTITRM
C00106 00063 SRT11X: MOV PGOADR,SEADR
C00108 00064 $LOGO:
C00109 00065 ADRERR: PMSG <?ADR>
C00110 00066 .SBTTL LINE PRINTER SELECTION ROUTINE
C00112 00067 .SBTTL LP20 INITIALIZATION ROUTINE
C00114 00068 .SBTTL CONSOLE TELETYPE FUNCTIONS
C00115 00069 .SBTTL KLINIK FIELD SERVICE REMOTE DIAGNOSTICS ENABLE
C00116 ENDMK
C⊗;
.SBTTL CONSOLE PACKAGE FOR KL10/11 INTERFACE, 9-SEPT-75
CONSL: MOV #PR7,PS ;DISABLE INTERRUPTS
MOV #STACK,SP ;RESET STACK
MOV #$STUF,R0 ;SETUP FOR STACK UNDERFLOW
MOV R0,(SP)
1$: PUSH R0
MOV SP,$KONSP
KONSL: MOV $KONSP,SP ;RESET STACK POINTER
TTPINI ;INIT TTY POINTERS
CLR DDTFLG
CLR IFILEF
CLR HLPPNT
CLR PCMDFLG
PFORCE ;ALL OUTPUT TO TTY
JSR PC,$CKSUM ;COMPUTE CHECKSUM OF "KLDCP"
CMP R0,$ILDSUM ;DOES IT MATCH AS LOADED ?
BEQ 2$ ;YES, OK !!!!
MOV R0,$ILDSUM ;NO, ONLY REPORT CHANGES
PMSG <?"KLDCP" CKSUM\>
2$: TST JFILEF
BNE $$CONSL
PMSG <CMD:\>
BR $$CONSL
$KONSL: TTIBRK ;GET BREAK CHAR FROM LAST OPERATION
BCS $KONS1 ;NO DATA
CMPB #',,R0 ;WAS LAST BREAK A COMMA ?
BEQ $RPT ;BR IF YES, CONTINUE STRING PROCESS
CMPB #' ,R0 ;WAS LAST BREAK A SPACE ?
BEQ $RPT ;YES, CONTINUE STRING PROCESS
CMPB #TAB,R0 ;WAS LAST BREAK A TAB ?
BEQ $RPT ;YES, CONTINUE STRING PROCESS
TST R0
BEQ 11$ ;NULL, EOL
CMP #LF,R0 ;IS IT LF ?
BEQ 11$ ;YES
CMP #ALTMOD,R0
BEQ 11$ ;IS IT ALTMODE ?
CMP #CR,R0 ;IS IT A CR ?
BNE 2$ ;NO, INVALID TERMINATION
11$: TST RPTFLG ;PRESENTLY DOING A REPEAT ?
BEQ $KONS1 ;BR IF NO
JSR PC,$PTTYC ;CHECK OPERATOR INTERRUPT
1$: MOV #$INBUF+2,$INPTC ;REPEAT, REDO COMMAND
BR $RPT
2$: JMP $CMDER
$$CONSL:CLR RPTFLG
CLR DVDIRF ;CLEAR DEVICE DIRECTORY FLAG
$KONS1: TST PCMDFLG ;DOING PROGRAM COMMAND ?
BEQ 1$ ;NO
JMP PCMDE ;YES, RETURN TO PROGRAM
1$: TST IFILEF ;PROCESSING INDIRECT FILE ?
BEQ 2$ ;NO
JMP IFILIN ;YES, GET CHARS FROM STORAGE
2$: TST JFILEF ;DOING DOUBLE INDIRECT ?
BPL $KONS2 ;NO
JMP JFILIN ;YES, GET CHARS FROM STORAGE
$KONS2: MOV SP,$KONSP ;SAVE STACK POINTER
1$: PFORCE
PNTCI
'>
PMSG <. ←>
2$: RUNLP ;RUN LOOP &/OR READ IN A TTY LINE
BCC $RPT ;RESPONSE, GO PROCESS
CMP #$INBUF,$INPTR ;ANYTHING BEEN TYPED ?
BNE 1$ ;YES, REPROMPT
BR 2$
$RPT: CLR ALLFLG ;CLEAR ALL PRINT FLAG
TTISDL ;READ ONE CHARACTER
BCC $CMDER ;...NUMBER, ILLEGAL
1$: CMPB #';,R0
BEQ $$CONSL ;SEMICOLON, LOCAL COPY ONLY
CMPB #'.,R0
BEQ $RPT ;DOT, IGNORE
MOVB R0,$KDCEN ;PLACE IN END OF DECODER
TTICHR ;READ SECOND CHARACTER
BCS $KONS1 ;EVEN 1 CHAR CMDS ARE 2 CHAR MIN.
CMPB #12,R0 ;IF THIS CHAR IS A LINE FEED
BEQ $KONS1 ;..1ST CHAR MUST HAVE BEEN CR, IGNORE
CMPB #15,R0 ;IF THIS CHAR A CR
BEQ 3$ ;THIS IS A SINGLE LETTER COMMAND
CMPB #33,R0 ;IF ALTMODE
BEQ 3$ ; DITTO
MOVB R0,$KDCEN+1 ;PLACE SECOND IN END OF DECODER
;THE COMMAND PORTION OF THE INPUT STRING IS READY TO BE DECODED
4$: MOV $KDCEN,R0 ;COMMAND TO R0
MOV #$KDCRE,R1 ;ADDRESS OF LIST TO R1
2$: CMP R0,(R1)+ ;TEST FOR COMMAND
BNE 2$ ;NOT FOUND YET
CLR $KDCEN
CLR ENQFLG
JMP @$DISPH-$KDCRE-2(R1) ;EXIT TO SELECTED SUBROUTINE
3$: MOVB #40,$KDCEN+1 ;MAKE SINGLE LETTER COMMAND
BR 4$ ;LETTER & SPACE FOR LOOKUP
$CMDER: PNTCI
'?
BR $$$CC
$$CNTLC:CLR DIAFLG
CLRB TENRUN ;CLEAR PDP-10 RUNNING FLAG
TST PCMDFLG ;DOING PROGRAM COMMAND ?
BNE $$$CC ;YES
CLR PRGRUN ;CLEAR PROGRAM RUNNING FLAG
$$$CC: SETFLG
$TTLKF
TST DEVTYP ;IN ACT10 MODE ?
BPL 1$ ;NO
TST ENQFLG ;DOING APT10 COMMAND ?
BEQ 1$ ;NO
COMCLR ;ACT10, CLEAR COMM, THEN TO CONSL
1$: PUSH $FORCE ;SAVE FORCED PRINTING FLAG
PFORCE
PCRLF ;FORCE PRINT ERROR
POP $FORCE ;RESTORE
TST PCMDFLG ;DOING PROGRAM COMMAND ?
BEQ 2$ ;NO
JMP PCMDE1 ;YES, TAKE ERROR RETURN
2$: CLR JFILEF ;CLEAR DOUBLE INDIRECT FLAG
JMP KONSL
.SBTTL CONSOLE DISPATCH TABLE
$KDCRE: .ASCII /R / ;REPEAT OPERATOR
.ASCII /FX/ ;DIAGNOSTIC FUNCTION EXECUTE
.ASCII /FW/ ;DIAGNOSTIC FUNCTION WRITE
.ASCII /FR/ ;DIAGNOSTIC FUNCTION READ
.ASCII /FS/ ;DIAGNOSTIC FUNCTION SYNC
.ASCII /DA/ ;DIAGNOSTIC DEPOSIT INTO AR
.ASCII /EX/ ;PDP-10 INSTRUCTION EXECUTE
.ASCII /MR/ ;MASTER RESET
;PDP-10 EXAMINE/DEPOSIT FUNCTIONS
.ASCII /EM/ ;EXAMINE 10 AT ADR AND PRINT
.ASCII /DM/ ;DEPOSIT DATA IN 10 ADDRESS
.ASCII /EN/ ;EXAMINE AND PRINT NEXT 10 ADDRESSES
.ASCII /DN/ ;DEPOSIT DATA INTO NEXT 10 ADDRESSES
.ASCII /MZ/ ;MEMORY ZERO
;START/STOP FUNCTIONS
.ASCII /SP/ ;STOP 10, CLEAR RUN FLOP
.ASCII /RN/ ;START 10, SET RUN FLOP
.ASCII /SI/ ;SINGLE INSTRUCTION,PUSH CONTINUE
.ASCII /PL/ ;PULSE CLOCK
.ASCII /BU/ ;BURST CLOCK
.ASCII /SM/ ;START MICRO CODE,SUPPORT EXAMINE/DEPOSIT
.ASCII /ST/ ;START AT 10 ADDRESS
.ASCII /SW/ ;PDP-10 SWITCHES
.ASCII /AC/ ;"AC BLK" SELECTION
.ASCII /MC/ ;PDP-10 MONITOR CONTINUE
.ASCII /EP/ ;SET EOP INTERVAL
;PDP-11 FUNCTIONS
.ASCII /SE/ ;START 11 AT ADR
.ASCII /EE/ ;EXAMINE 11 AT ADR AND PRINT
.ASCII /DE/ ;DEPOSIT DATA IN 11 ADDRESS
.ASCII /EB/ ;EXAMINE 11 BYTE
.ASCII /DB/ ;DEPOSIT 11 BYTE
.ASCII /ZE/ ;ZERO ELEVEN
;RAM FUNCTIONS
.ASCII /EC/ ;EXAMINE C-RAM AT ADDRESS AND PRINT
.ASCII /DC/ ;DEPOSIT DATA INTO C-RAM ADDRESS
.ASCII /RC/ ;READ C-RAM, FR'S 140-141-142-143
.ASCII /ED/ ;EXAMINE D-RAM AT ADDRESS AND PRINT
.ASCII /DD/ ;[START DDT] OR DEPOSIT D-RAM
.ASCII /MM/ ;MICRO-CODE SYNC MARK
.ASCII /MU/ ;MICRO-CODE SYNC UNMARK
.ASCII /MT/ ;MICRO-CODE TIME CHANGE
;CLOCK OPERATIONS
.ASCII /CS/ ;CLOCK SOURCE
.ASCII /CR/ ;CLOCK RATE
;PROCESSOR PARITY FUNCTIONS
.ASCII /PD/ ;DISABLE PARITY STOP
.ASCII /PE/ ;ENABLE PARITY STOP
;INTERNAL E-BOX REGISTER READ FUNCTIONS
.ASCII /AR/ ;READ & PRINT AR REGISTER
.ASCII /BR/ ;READ & PRINT BR REGISTER
.ASCII /MQ/ ;READ & PRINT MQ REGISTER
.ASCII /FM/ ;READ & PRINT FM REGISTER
.ASCII /AD/ ;READ & PRINT ADDER
.ASCII /PC/ ;READ & PRINT PC
.ASCII /VM/ ;READ & PRINT VMA
.ASCII /SC/ ;READ & PRINT SC REGISTER
.ASCII /FE/ ;READ & PRINT FE REGISTER
.ASCII /ER/ ;READ & PRINT E-BUS REGISTER
.ASCII /PI/ ;READ & PRINT PI SYSTEM
.ASCII /AL/ ;PRINT ALL, C-RAM & REGISTERS
;CACHE OPERATIONS
.ASCII /CE/ ;CACHE ENABLE
.ASCII /CI/ ;CACHE INVALIDATE
.ASCII /CF/ ;CACHE FLUSH
;REPEAT CONTROL
.ASCII /RP/ ;REPEAT & PRINT OR RP04 SELECT
.ASCII /TD/ ;TIME DELAY
;CONSOLE (TTY) CONTROL FUNCTION
.ASCII /TP/ ;SET TTY PAGE LENGTH
.ASCII /TW/ ;SET TTY PAGE WIDTH
.ASCII /TF/ ;SET TTY FILL COUNT
.ASCII /TT/ ;SWITCH TO REMOTE TELETYPE OPERATION
.ASCII /LP/ ;LINE PRINTER SELECTION
.ASCII /KL/ ;KLINIK SELECTION
;KL10 MONITOR (PROGRAM & ACT10) COMMANDS
.ASCII /B / ;BOOT
.ASCII /LI/ ;LOGIN
.ASCII /H / ;HELP
.ASCII /P / ;PROGRAM
.ASCII /LT/ ;LOAD TEN
.ASCII /LE/ ;LOAD ELEVEN
.ASCII /LR/ ;LOAD RAM
.ASCII /LB/ ;LOAD ELEVEN BINARY
.ASCII /V / ;VERFIY PROGRAM
.ASCII /S / ;SCRIPT
.ASCII /M / ;MASTER SCRIPT
.ASCII /C / ;COMMENT/CORRECTIVE ACTION
.ASCII /GO/ ;GO START PROGRAM
.ASCII /LO/ ;LOGOUT
.ASCII /GS/ ;GENERATE SCRIPT
.ASCII /CD/ ;PDP-11 CORE DUMP
.ASCII /TA/ ;ACT10 TO RP04 TRANSFER
.ASCII /WF/ ;DECTAPE TO RP04 WRITE
.ASCII /RE/ ;'RENM' RENAME RP04 FILE
.ASCII /T / ;TIME
.ASCII /BT/ ;BOOT TEN
.ASCII /AT/ ;SWITCH TO ACT10 MODE
.ASCII /DT/ ;SWITCH TO DECTAPE MODE, SELECT UNIT
.ASCII /RX/ ;SWITCH TO FLOPPY MODE, SELECT UNIT
.ASCII /DI/ ;DIRECTORY, DECTAPE/RP04/FLOPPY
.ASCII /BP/ ;BREAKPOINT TRAP LAYER
.ASCII /BC/ ;BREAKPOINT CONTINUE
.ASCII /RG/ ;TYPE OUT BREAK STUFF
.ASCII /RB/ ;REMOVE BREAKPOINTS
.ASCII /HC/ ;ERROR HALT CONTINUE
.ASCII /RI/ ;REINITIALIZE SYSTEM
.ASCII /I / ;INDIRECT COMMAND FILE PROCESS
.ASCII /J / ;DOUBLE INDIRECT COMMAND FILE
.ASCII /JC/ ;"J" FILE CONTINUE
$KDCEN: 0 ;ERROR TRAP FOR NONEXISTANT COMMANDS
;DISPATCH TABLE
$DISPH: .RPT ;REPEAT OPERATION
.DFXCT ;DIAGNOSTIC FUNCTION EXECUTE
.DFWRT ; " " WRITE
.DFRD ; " " READ
.FS ; " " SYNC
.DA ; " DEPOSIT INTO AR
.XCT ;EXECUTE 10 INSTRUCTION
.MRESET ;MASTER RESET
.EXM ;EXAMINE 10
.DP ;DEPOSIT 10
.EXMNX ;EXAMINE NEXT 10
.DPNX ;DEPOSIT NEXT 10
.MZ ;MEMORY ZERO
$SP ;STOP 10
$RN ;RUN 10
$SI ;SINGLE INSTRUCT 10
.PL ;PULSE 10
.BU ;BURST CLOCK
.SM ;START MACHINE
$ST ;START 10
$SW ;SWITCHES 10
.AC ;"AC BLK" SELECTION
$MC ;MONITOR CONTINUE
.EP ;SET EOP INTERVAL
.SE ;START ELEVEN
.EE ;EXAMINE ELEVEN
.DE ;DEPOSIT ELEVEN
.EB ;EXAMINE 11 BYTE
.DB ;DEPOSIT 11 BYTE
.ZE ;ZERO ELEVEN
$EC ;EXAMINE C←RAM
$DC ;DEPOSIT C-RAM
$RC ;READ C-RAM
$ED ;EXAMINE D←RAM
$DDTX ;[START DDT] OR DEPOSIT D←RAM
.MM ;MICRO-CODE MARK
.MU ;MICRO-CODE UNMARK
.MT ;MICRO-CODE TIME CHANGE
.CS ;SELECT CLOCK SOURCE
.CR ;SELECT CLOCK RATE
.PD ;PROCESSOR PARITY DISABLE
.PE ;PROCESSOR PARITY ENABLE
.AR ;READ REGISTERS
.BR
.MQ
.FM
.AD
.PC
.VM
.SC
.FE
.ERG
.PI ;READ & PRINT PI SYSTEM
.ALL ;PRINT ALL
.CE ;CACHE ENABLE
.CI ;CACHE INVALIDATE
.CF ;CACHE FLUSH
.RPTP ;REPEAT & PRINT
.TD ;TIME DELAY
$TP ;SET TTY PAGE LENGTH
$TW ;SET TTY PAGE WIDTH
$TF ;SET TTY FILL PARAMETER
$TT ;SWITCH TO REMOTE TTY
$LPT ;LINE PRINTER SELECTION
.KLINIK ;KLINIK SELECTION
;KL10 MONITOR (PROGRAM & ACT10) COMMANDS
$BOOT ;BOOT SYSTEM
$LOGIN ;LOG IN
$HELP ;HELP
$PROG ;LOAD PROGRAM
$LDT ;LOAD TEN
$LDE ;LOAD ELEVEN
$LDR ;LOAD RAM
$LDB ;LOAD ELEVEN BINARY
$VERIFY ;VERIFY PROGRAM
$SCRPT ;SCRIPT REQUEST
$MSCP ;MASTER SCRIPT REQUEST
$COMNT ;COMMENT
$GO ;PROGRAM GO
$LOGO ;LOG OUT
$GSCP ;GENERATE SCRIPT
$CD ;PDP-11 CORE DUMP
$TA ;ACT10 TO RP04 TRANSFER
$WF ;DECTAPE TO RP04 WRITE FILE
$RE ;'RENM' RP04 RENAME FILE
$TIME ;TIME
$BOOTT ;BOOT PDP-10
$AT ;SELECT ACT-10 MODE
$DT ;SELECT DECTAPE MODE & UNIT
$RX ;SELECT FLOPPY MODE & UNIT
$DI ;DIRECTORY, DECTAPE/RP04/FLOPPY
.BP ;BREAKPOINT INSERTION
.BC ;BREAKPOINT CONTINUE
.RG ;PRINT SAVED REGISTERS
.RB ;REMOVE BREAKPOINTS
.HC ;HALT CONTINUE
.RI ;REINITIALIZE CONSOLE
$IFILE ;INDIRECT FILE
$JFILE ;DOUBLE INDIRECT FILE
$JC ;J FILE CONTINUE
$CMDER ;NO SUCH COMMAND
.SBTTL DIAGNOSIC CONSOLE UTILITY COMMAND PROCESS
;UTILITY PROGRAM CHECK
$KLUCK: CMP PID,PIDU ;UTILITY PROGRAM IN CORE ?
BNE 1$
CMP PID+2,PIDU+2
BNE 1$
CMP PDVER,#DECVER ;PROPER VERSION ?
BNE 1$
RTS PC ;OK
1$: PMSG <PLEASE LOAD "KLDCPU.A11" FIRST>
JMP $CNTLC
PIDU: .RAD50 /KLDCPU/
;TRANSFER FROM APT10 DISPATCH
$TA: JSR PC,$KLUCK ;UTILITY IN CORE ?
JMP @TAPT ;YES
;WRITE FILE FROM DTA/FLOPPY DISPATCH
$WF: JSR PC,$KLUCK ;UTILITY IN CORE ?
JMP @WFILE ;YES
;REMOTE TELETYPE COMMUNICATIONS DISPATCH
$TT: JSR PC,$KLUCK ;UTILITY IN CORE ?
JMP @REMOTE ;YES
;RP04 DISK DIRECTORY DISPATCH
$RPDIR: JSR PC,$KLUCK ;UTILITY IN CORE ?
JMP @DSKDIR ;YES
.SBTTL CONSOLE COMMAND REPEAT CONTROL
.RPT: SETFLG
RPTFLG ;SET REPEAT FLAG
.RPTX: PNORML
JMP $RPT
.RPTP: TTISDL
BCC 1$ ;NUMBER
TTBACK
MOV #177400,RPTFLG ;SET REPEAT & PRINT
BR .RPTX
1$: JMP $RP ;MUST BE RP04 SELECTION
.SBTTL PROGRAM CONSOLE COMMAND PROCESS
$PRGNPT:SETFLG ;PROGRAM COMMAND, NO PRINT
PCMDNF
BR $PRGXX
$PRGCMD:CLR PCMDNF
$PRGXX: SETFLG
PCMDFLG ;SET PROGRAM COMMAND FLAG
TST R0
BEQ 2$ ;USE CURRENT INPUT BUFFER, R0=0
CMP #-1,R0
BNE 3$
MOV #$OUTBF,R0 ;USE OUTPUT BUFFER, R0 = -1
MOV R0,$OUTPT
3$: JSR PC,$PCMDX ;TRANSFER COMMAND TO INPUT BUFFER
2$: MOV #$INBUF,$INPTC ;SET PICKUP POINTER
MOV SP,$$SVSP ;SAVE STACK POINTER
JMP $RPT ;PROCESS COMMAND
PCMDE: MOV $$SVSP,SP ;RESTORE STACK POINTER
CLR PCMDFLG
CLR PCMDNF
CLR ENQFLG
EXIT
PCMDE1: MOV $$SVSP,SP
PCMDE3: CLR PCMDFLG ;ERROR, C-BIT SET RETURN
CLR PCMDNF
CLR HLPPNT
EXITERR
PCMDE2: MOV $$SVSP,SP
BIS #NBIT,14(SP) ;CONTROL C DURING TYPEOUT
BR PCMDE3 ;NBIT & CBIT SET RETURN
$PCMDX: MOV #$INBUF,R1 ;MOVE COMMAND TO INPUT BUFFER
$DIASX=.
1$: MOVB (R0)+,(R1)+ ;TRANSFER CHARS
BNE 1$ ;TILL NULL
DEC R1
MOVB #CR,(R1)+
MOVB #LF,(R1)+
MOV R1,$INPTR ;SAVE EOL POINTER
RTS PC
;PROGRAM INDIRECT CCL FILE PROCESS
$TTICCL:MOV IFINP,R1 ;XFER CHARS INTO INPUT BUFFER
TSTB (R1) ;FIRST CHAR A NULL ?
BEQ 1$ ;YES, FINISHED
JSR PC,IJFILX
MOV R1,IFINP ;RESAVE POINTER
EXIT
1$: EXITERR ;FINISHED, C-BIT SET RETURN
;INDIRECT COMMAND FILE PROCESS
IFILIN: MOV IFINP,R1 ;XFER CHARS INTO INPUT BUFFER
TSTB (R1) ;FIRST CHAR A NULL ?
BEQ IFILX1 ;YES, FINISHED
JSR PC,IJFILX
MOV R1,IFINP ;RESAVE STORAGE POINTER
TST JFILEF ;DON'T PRINT "I" IF UNDER "J"
BNE 3$
IFILX=.
$PMSG ;PRINT COMMAND LINE
$INBUF
3$: JMP $RPT ;GO PROCESS
IFILX1: JMP CONSL ;FINISHED
;DOUBLE INDIRECT COMMAND FILE PROCESS
JFILIN: TST PRGRUN ;PROGRAM PRESENTLY RUNNING ?
BEQ 3$ ;NO
JMP $KONS2 ;YES, WAIT TILL IT'S DONE
3$: MOV JFINP,R1 ;XFER CHARS INTO INPUT BUFFER
TSTB (R1) ;FIRST CHAR A NULL ?
BEQ 2$ ;YES, FINISHED
JSR PC,IJFILX
MOV R1,JFINP ;RESAVE STORAGE POINTER
BR IFILX
2$: CLR JFILEF
BR IFILX1
IJFILX: MOV #$INBUF,R0
MOV R0,$INPTC
1$: MOVB (R1)+,(R0)+
BNE 1$
MOV R0,$INPTR
RTS PC
.SBTTL DIAGNOSTIC FUNCTIONS
;DIAGNOSTIC FUNCTION EXECUTE
.DFXCT: DFLEGAL ;FUNCTION LEGAL ?
TTISDO ;GET FUNCTION
CMP R0,#037 ;FUNCTION VALID ?
BGT $DFERR ;FX IS 000 TO 037
DFXCT ;DF EXECUTE
BR .DFX ;RETURN TO CONSOLE
;DIAGNOSTIC FUNCTION WRITE
.DFWRT: DFLEGAL ;FUNCTION LEGAL ?
TTISDO ;GET FUNCTION
CMP R0,#040
BLT $DFERR
CMP R0,#077
BGT $DFERR ;FW IS 040 TO 077
MOV R0,R2 ;SAVE FUNCTION
TTIS36 ;GET DATA
MOV R0,R1 ;PUT ADR OF 36BITS IN R1
MOV R2,R0 ;FUNCTION IN R0
DFWRT ;DIAGNOSTIC FUNCTION WRITE
.DFX: JMP $KONSL
;DIAGNOSTIC FUNCTION SYNC, GENERATES PULSE AT "A36E1"
.FS: DFLEGAL ;FUNCTION LEGAL ?
TTITRM
DFXCTT
74 ;SYNC IS FUNCTION EXECUTE 74
BR .DFX
$DFERR: PMSG <?FUNCTION ERR>
JMP $CNTLC
;DIAGNOSTIC READ AND PRINT
.DFRD: DFLEGAL ;FUNCTION LEGAL ?
CLR R3
TTISDO ;GET FUNCTION
MOV R0,R2
TTIBRK
BCS $DFERR
CMPB #COMMA,R0 ;IF BREAK IS A COMMA, MULTIPLE DFRD
BNE 1$
INC R3
TTCOCT
MOV R0,R4 ;SAVE LAST DFRD
1$: TSTB RPTFLG
BNE 2$
MOV R2,R0
PNTOCS
PSLASH
2$: MOV R2,R0
BEQ 21$ ;FR 0 USED TO READ E-BUS
CMP R0,#100
BLT $DFERR
CMP R0,#177
BGT $DFERR ;FR IS 100 TO 177
21$: MOV #.DFRDA,R1
DFRDMV
TSTB RPTFLG
BNE 3$
MOV R1,R0
PNT36B ;PRINT IN BINARY
3$: TST R3
BEQ 4$
PCRLF
CMP R2,R4
BHIS 4$
INC R2
BR 1$
4$: BR ALLEXT
.DFDP: DFLEGAL ;FUNCTION LEGAL ?
MOV #.DFRDA,R1
DFRDMV ;READ THE E-BUS
TSTB RPTFLG
BNE .DFX
.DFDPC: MOV #.DFRDA,R0
PNT36 ;PRINT IT OUT
ALLEXT: TST ALLFLG ;DOING ALL ?
BNE 1$ ;YES
TSTB RPTFLG ;DOING A REPEAT ?
BNE 2$ ;YES
ALLEX1=.
PCRLF
2$: BR .DFX
1$: RTS PC ;ALL, CONTINUE
.MQ: TTITRM
$ALLMQ=.
PMSGR <MQ />
1$: MOV #DPMQ,R0
BR .DFDP
.FM: DFLEGAL ;FUNCTION LEGAL ?
TTITRM
$ALLFM=.
TSTB RPTFLG
BNE 1$
PNTCI
"FM
DFRDT ;READ FM ADDRESS
DPFMA
MOV @.DAT2,R0
SHIFTR
5
BIC #177760,R0
PNTODT
2
PNTCI
'/
1$: MOV #DPFM,R0
BR .DFDP
$DPERR: JMP $DFERR
.AR: TTICHR
BCS $DPERR
CMPB #'X,R0 ;IS COMMAND 3 LETTERS ?
BEQ 1$ ;BR IF 3RD LETTER IS X
TTBTRM
$ALLAR=.
PMSGR <AR />
2$: MOV #DPAR,R0
BR .DFDP ;READ AND PRINT AR
1$: TTITRM
$ALARX=.
PMSGR <ARX/>
3$: MOV #DPARX,R0
BR .DFDP
.AD: TTICHR
BCS $DPERR
CMPB #'X,R0 ;IS COMMAND 3 LETTERS ?
BEQ 1$ ;BR IF 3RD LETTER IS X
CMPB #'B,R0
BEQ .ADB ;ADB, PRINT ADDRESS BREAK
TTBTRM
$ALLAD=.
PMSGR <AD />
2$: MOV #DPAD,R0
BR .DFDP ;READ AND PRINT AD
1$: TTITRM
$ALADX=.
PMSGR <ADX/>
3$: MOV #DPADX,R0
BR .DFDP ;READ AND PRINT ADX
.BR: TTICHR
BCS $DPERR
CMPB #'X,R0 ;IS COMMAND 3 LETTERS ?
BEQ 1$ ;BR IF 3RD LETTER IS X
TTBTRM
$ALLBR=.
PMSGR <BR />
2$: MOV #DPBR,R0
BR .DFDP ;READ AND PRINT BR
1$: TTITRM
$ALBRX=.
PMSGR <BRX/>
3$: MOV #DPBRX,R0
BR .DFDP ;READ AND PRINT THE BRX
.ERG: TTICHR
BCS $DPER1
CMPB #'G,R0
BNE $DPER1
TTITRM
$ALLEB: PMSGR <ERG/>
MOV #DPERG,R0
BR .DFDP ;READ & PRINT EBUS REGISTER
;MASTER RESET
.MRESET:TTITRM
MRESET
BR .DAX
;DEPOSIT INTO AR
.DA: DFLEGAL ;FUNCTION LEGAL ?
TTIS36 ;GET 36 BIT AR DATA
MOV R0,R1 ;ADR OF 36 BITS TO R1
JSR R5,WIRAR1 ;CALL IR/AR WRITE ROUTINE
.DAX: JMP $KONSL
.PC: TTITRM
$ALLPC=.
PMSG <PC />
TST TENRUN ;PDP-10 PRESENTLY RUNNING ?
BEQ 1$ ;NO, GO AHEAD THEN
DFXCTT
CLRRUN ;CLEAR RUN
TDELAY ;WAIT FOR HALT LOOP
DFXCTT
STPCLK ;STOP CLOCK
DFPC ;READ PC
PUSH R0
DFXCTT
STRCLK ;START CLOCK
DFXCTT
SETRUN ;SET RUN
DFXCTT
CONBUT ;SET CONTINUE
POP R0
BR PCVMAP ;GO PRINT
1$: DFPC
PCVMAP:
PNTADR
TST ALLFLG
BNE 1$
JMP ALLEX1 ;RETURN TO CONSOLE
1$: RTS PC ;ALL, RETURN TO ROUTINE
.VM: DFLEGAL ;FUNCTION LEGAL ?
TTICHR
BCS $DPER1
CMPB #'A,R0
BEQ 1$
CMPB #'H,R0
BEQ .VMH
BR $DPER1
1$: TTITRM
$ALVMA=.
PMSG <VMA/>
DFVMA
BR PCVMAP
$DPER1: JMP $DFERR
.VMH: TTITRM
$ALVMH=.
PMSG <VMH/>
DFVMAH
BR PCVMAP
.ADB: DFLEGAL ;FUNCTION LEGAL ?
TTITRM
PMSG <ADB/>
DFADB
BR PCVMAP
.FE: TTITRM
$ALLFE=.
PMSGR <FE/>
1$: MOV #DPFE,R4
BR FESCP
.SC: TTITRM
$ALLSC=.
PMSGR <SC/>
1$: MOV #DPSC,R4
FESCP: DFLEGAL ;FUNCTION LEGAL ?
MOV R4,R0
DFRD
MOV @.DAT2,R3 ;GET LO-ORDER 5 BITS
SWAB R3 ;FROM 7-11 OF DEXWDS
BIC #177740,R3
MOV R4,R0
INC R0
DFRD
MOV @.DAT2,R0 ;GET HI-ORDER 5 BITS
SHIFTR
3
BIC #176037,R0
BIS R3,R0 ;COMBINE HI & LO ORDER BITS
TSTB RPTFLG
BNE 1$
PNTODT
4
PSPACE
1$: JMP ALLEXT
;PRINT PRIORITY INTERRUPT FUNCTIONS
.PI: DFLEGAL ;FUNCTION LEGAL ?
TTITRM
JSR PC,$ALPIG ;PRINT PI GENS
JSR PC,$ALPIH ;PRINT PI HOLDS
JSR PC,$ALPIO ;PRINT PI ON'S
PCRLF
JMP $KONSL
$ALPIG: PMSG <PI GEN/>
DFRDT
READ1 ;READ PI GENS
;FR 101, BITS 11-17
$ALPIY: MOV @.DAT2,R0
SHIFTR
2
$ALPIX: BIC #177600,R0 ;DATA IS ONLY 7 BITS
PNTODT
3
RTS PC
$ALPIH: PMSG < PI HOLD/>
DFRDT
READ0 ;READ PI HOLDS
MOV @.DAT2,R0 ;FR 100, BITS 03-09
MOV @.DAT1,R1
ROR R1
ROR R0
SHIFTR
9.
BR $ALPIX
$ALPIO: PMSG < PI ON/>
DFRDT
READ0 ;READ PI ONS
BR $ALPIY ;FR 100, BITS 11-17
;PRINT ALL - C-RAM & REGISTERS
.ALL: TTICHR
BCS 1$
CMPB #'L,R0
BNE 1$
TTITRM
DFLEGAL ;FUNCTION LEGAL ?
PNTCPU
JMP $KONSL
1$: JMP $DFERR ;ERROR
$PNTCPU:SETFLG
ALLFLG ;SET ALL FLAG
PUSH RPTFLG
CLR RPTFLG
JSR PC,$ALLEC ;PRINT C-RAM
JSR PC,$ALLAR ;PRINT AR
JSR PC,$ALLBR ;PRINT BR
JSR PC,$ALLAD ;PRINT ADDER
JSR PC,$ALLSC ;PRINT SC
JSR PC,$ALLPC ;PRINT PC
PCRLF
JSR PC,$ALARX ;PRINT ARX
JSR PC,$ALBRX ;PRINT BRX
JSR PC,$ALADX ;PRINT ADX
JSR PC,$ALLFE ;PRINT FE
JSR PC,$ALVMA ;PRINT VMA
PCRLF
JSR PC,$ALLMQ ;PRINT MQ
JSR PC,$ALLFM ;PRINT FM
JSR PC,$ALLEB ;PRINT EBUS REGISTER
JSR PC,$ALVMH ;PRINT VMA HELD
PCRLF
JSR PC,$ALPIG ;PRINT PI GENS
JSR PC,$ALPIH ;PRINT PI HOLDS
JSR PC,$ALPIO ;PRINT PI ON'S
POP RPTFLG
PCRLF
CLR ALLFLG
EXIT
.SBTTL PDP-10 START/STOP FUNCTIONS
;THESE REQUIRE STANDARD MICROCODE TO DO ANYTHING WORTHWHILE!
;STOP PDP-10, CLEAR RUN FLOP
$SP: TTITRM
TENSP ;STOP TEN
BCC 1$
JMP .XCTER ;DID NOT STOP PROPERLY
1$: CLR PRGRUN
BR $RNX ;HOPE ENOUGH DELAY BUILT IN
;CONTINUE PDP-10 FROM OLD PC. ASSUME CLOCK MAY BE OFF
$RN: TTITRM
$RNN: CLR CLKPE ;CLEAR CLOCK PARITY ENABLES
MOV #20,R2
MOV PEBITS,R1 ;GET ENABLE BITS
BEQ 2$ ;NOT ENABLED
BIT R2,R1 ;AR/ARX PARITY ENABLED ?
BEQ 1$ ;NO
BIS #2,CLKPE ;YES, SET ENABLE BIT
1$: BIS #1,CLKPE ;SET CLOCK STOP ENABLE
2$: DFWRTT
CLKPE
LDCHK2 ;LOAD ENABLE FUNCTION REGISTER
3$: BIC R2,R1
MOV R1,CLKPE ;SETUP FM,CRAM,DRAM, FS
DFWRTT
CLKPE
LDCHK1 ;LOAD CONDITION ENABLE REGISTER
DFXCTT ;GET CLOCK RUNNING
STRCLK
DFXCTT ;SET RUN AND LET 'ER GO
SETRUN
DFXCTT ;SET CONTINUE BUTTON
CONBUT
SETFLG
TENRUN ;SET TEN RUN FLAG
SETFLG
PRGRUN ;SET PROGRAM RUNNING FLAG
$RNX: JMP $KONSL
;START PDP-10 DDT
$DDTX: TTISDL
BCS 1$ ;NON-NUMBER
JMP $DD ;NUMBER, MUST BE FOR D-RAM
1$: CMPB #'T,R0
BEQ 2$ ;"DDT", START PDP-10 AT "DDTSRT"
JMP $DFERR
2$: TTITRM
MOV #TDDT,R0
JMP $$ST ;GO TO START ROUTINE
;SINGLE INSTRUCT PDP-10. ASSUME CLOCK IS RUNNING AND RUN IS SET
$SI: TENSP ;STOP TEN
BCC 1$
JMP .XCTER ;DID NOT STOP PROPERLY
1$: CLR R5
TTISDL
BCS 4$ ;NON-NUMBER
TTIDEC
BCS 2$ ;NO ARG, DO ONCE
MOV R0,R5
2$: DFXCTT ;PRESS CONTINUE PULSER
CONBUT
TDELAY ;SMALL TIME DELAY
DEC R5 ;COMPLETED REQUESTED INSTRUCTIONS ?
BGT 2$
JMP $KONSL ;YES, RETURN TO CONSOLE
4$: CMPB #'P,R0
BNE 2$
5$: TTITRM ;"SIP",SINGLE INSTRUCT AND PRINT
DFXCTT ;STOP CLOCK
STPCLK
JMP SIPNT ;REST SAME AS LAST OF "EXP"
;DIAGNOSTIC FUNCTION LEGALITY CHECK
$DFLEGAL:TST TENRUN ;PDP-10 PRESENTLY RUNNING ?
BNE 1$ ;YES, OPERATION ILLEGAL, ABORT
EXIT
1$: PMSG <?KL10 RUNNING, TYPE "SP" FIRST>
JMP $$$CC
;PULSE THE E-BOX CLOCK
.PL: DFLEGAL ;FUNCTION LEGAL ?
CLR TENCLK ;TURN OFF CLOCK IF ON
TTISDL
BCS 1$ ;NO ARG, DO ONCE
TTIDEC
BCS 1$ ;DO ONCE ANYWAY
MOV R0,R1 ;SAVE PULSE COUNT
BR 2$
1$: CLR R1
2$: ECLOK
BCC 3$
JSR R1,$ECTIM
3$: DEC R1 ;DONE REQUESTED CLOCKS ?
BGT 2$ ;NOT YET
.PLX: JMP $KONSL
;START MICROCODE IDLE.
;SUPPORT EXAMINE, DEPOSIT, AND EXECUTE OPERATIONS.
.SM: TTITRM
SM ;DO THE EMT
BCS .XCTER
BR .PLX
;CACHE INVALIDATE
.CI: MOV #$$CI,R0
.CIF: TTITRM
DFLEGAL ;FUNCTION LEGAL ?
EXCT
BCS .XCTER ;FAILED
BR .PLX ;OK, RETURN TO CONSOLE
;CACHE FLUSH
.CF: MOV #$$CF,R0
BR .CIF
$$CI: IO10 DATAI CCA,,0 ;INVALIDATE WITHOUT CORE UPDATE
$$CF: IO10 BLKO CCA,,0 ;SWEEP CACHE, VALIDATING CORE
.EVEN
;EXECUTE A PDP10 INSTRUCTION.
.XCT: TENSP ;STOP TEN
BCS .XCTER ;DID NOT STOP PROPERLY
TTISDL
BCS 1$ ;NON-NUMBER
TTIS36
EXCT
BCS .XCTER
BR .XCT2
1$: CMPB #'P,R0 ;"EXP" = EXECUTE & PRINT
BNE .XCT1
TTIS36
LODAR ;LOAD INTO AR
BCS .XCTER
SIPNT=.
PNORML
DFXCTT ;SET CONTINUE BUTTON
CONBUT
2$: ECLOK ;CLOCK TO GET STARTED
BCC 3$
JSR R1,$ECTIM
3$: BIT #HALTLP,@.DIAG1
BNE 2$ ;TILL WE LEAVE HALT LOOP
PNTCPU ;PRINT C-RAM & REGISTERS
4$: ECLOK ;CLOCK
BCC 5$
JSR R1,$ECTIM
5$: PNTCPU ;& PRINT TILL BACK TO HALT LOOP
BIT #HALTLP,@.DIAG1
BEQ 4$
.XCT2: JMP $KONSL
.XCT1: CMPB #'T,R0 ;"EXT" = EXECUTE & TRACE SETUP
BNE .CNSER
TTIS36
LODAR ;LOAD INTO AR
BCS .XCTER
DFXCTT ;SET CONTINUE BUTTON
CONBUT
BR .XCT2
.XCTER: PMSG <?UCODE HUNG>
JMP $CNTLC
.CNSER: JMP $DFERR
;BURST THE KL10 CLOCK
.BU: DFLEGAL ;FUNCTION LEGAL ?
CLR TENCLK ;TURN OFF CLOCKK IF ON
TTISDL
BCS 2$ ;NO ARG, DO ONCE
TTIDEC
BCS 2$ ;DO ONCE ANYWAY
1$: BURST ;PERFORM BURST
BR .XCT2
2$: MOV #1,R0 ;DO ONE BURST
BR 1$
;SELECT CLOCK SOURCE
.CS: TTISDL
BCC 1$
MOV CLKDFL,R0
SR R0,2
.CSR=.
BIC #177774,R0
PNTNBR
PCRLF
JMP $CONSL
1$: TTISDO
CMP R0,#2
BGT .CSRER
SHIFTL
2
BIC #14,CLKDFL ;CLEAR OLD SOURCE
.CCMN1: BIS R0,CLKDFL ;SET NEW SOURCE
.CCMN: DFLEGAL ;FUNCTION LEGAL ?
TST TENRUN
BEQ 1$
TENSP ;STOP TEN
BCS .XCTER ;DID NOT STOP PROPERLY
1$: DFWRTT ;WRITE TO CLOCK
CLKDFL
LDSEL
JMP $KONSL
.CSRER: JMP $PARA
;SELECT CLOCK RATE
.CR: TTISDL
BCC 1$
MOV CLKDFL,R0
BR .CSR
1$: TTISDO
CMP R0,#3
BGT .CSRER
BIC #3,CLKDFL ;CLEAR OLD RATE
BR .CCMN1
;PROCESSOR PARITY DISABLE
.PD: TTITRM
CLR PEBITS ;CLEAR PARITY ENABLE BITS
JMP $CONSL
;PARITY ENABLED AND CLOCK ERROR STOP MESSAGES
$PEAR: .ASCIZ %, AR/ARX%
$PEFM: .ASCIZ %, FM PARITY%
$PECR: .ASCIZ %, CRAM PARITY%
$PEDR: .ASCIZ %, DRAM PARITY%
$PEFS: .ASCIZ %, FS PROBE%
.EVEN
;PROCESSOR PARITY ENABLE
;PARITY ENABLE BITS ARE CODED AS FOLLOWS:
; AR/ARX, FM, CRAM, DRAM, FS
; 0 = PARITY DISABLED
; 37 WOULD = ALL ENABLED
.PE: TTISDL
BCC 1$
20$: PMSG <ENABLED: >
MOV PEBITS,R1 ;PRINT PARITY ENABLE BITS
MOV R1,R0
PNTODT
2
10$: BIT #20,R1
BEQ 11$
$PMSG
$PEAR ;AR/ARX PAGE FAIL
11$: BIT #10,R1
BEQ 12$
$PMSG
$PEFM ;FM PARITY
12$: BIT #4,R1
BEQ 13$
$PMSG
$PECR ;CRAM PARITY
13$: BIT #2,R1
BEQ 14$
$PMSG
$PEDR ;DRAM PARITY
14$: BIT #1,R1
BEQ 15$
$PMSG
$PEFS ;FS PROBE
15$: PCRLF
3$: JMP $CONSL
1$: TTISDO
CMP R0,#37
BGT .CSRER
MOV R0,PEBITS ;SAVE
BR 20$
;MICRO-CODE SYNC MARK ROUTINES
.MU: MOV #-1,R5 ;MICRO UNMARK
BR .MMC
.MM: CLR R5 ;MICRO MARK
.MMC: DFLEGAL ;FUNCTION LEGAL ?
TTICRA ;GET C-RAM ADDRESS
MOV R0,$ECADR
RCRAM ;READ C-RAM
TST R5
BNE 3$
BIS #20,4(R0) ;SET MARK BIT
BR .MMX
3$: BIC #20,4(R0) ;CLEAR MARK BIT
.MMX: MOV R0,R1
MOV $ECADR,R0
WCRAM ;WRITE C-RAM BACK
JMP $KONSL
;MICRO-CODE TIME FIELD CHANGE ROUTINE
.MT: DFLEGAL ;FUNCTION LEGAL ?
TTICRA
MOV R0,$ECADR
TTISDO
CMP R0,#3 ;TIME FIELD IS 0-3
BGT .CSRER
MOV R0,R5
MOV $ECADR,R0
RCRAM ;READ C-RAM
BIC #12,(R0) ;CLEAR OLD TIME
CLR R4
BIT #2,R5
BEQ 1$
BIS #10,R4
1$: BIT #1,R5
BEQ 2$
BIS #2,R4
2$: BIS R4,(R0) ;SET NEW TIME
BR .MMX
;CACHE ENABLE
;CACHE ENABLE BITS ARE CODED AS FOLLOWS:
; 10 = CACHE 0
; 4 = CACHE 1
; 2 = CACHE 2
; 1 = CACHE 3
; 17 WOULD = ALL CACHES ENABLED
.CE: TTISDL ;GET ENABLE CODE
BCS 20$ ;CR, PRINT ENABLE
1$: TTISDO
CMP R0,#17 ;ENABLE IS 0 TO 17
BGT 2$
MOV R0,CLKDFL+4 ;PUT IN CLOCK DEFAULT PARAMETER WORD
BR 20$
2$: JMP $PARAM
20$: PMSG <CACHES ENABLED: >
MOV CLKDFL+4,R1
MOV R1,R0
PNTODT ;PRINT CODE
2
21$: CLR R2
BIT #10,R1 ;CACHE 0 ENABLED ?
BEQ 22$
JSR PC,.CEP
22$: INC R2
BIT #4,R1 ;CACHE 1 ENABLED ?
BEQ 23$
JSR PC,.CEP
23$: INC R2
BIT #2,R1 ;CACHE 2 ENABLED ?
BEQ 24$
JSR PC,.CEP
24$: INC R2
BIT #1,R1 ;CACHE 3 ENABLED ?
BEQ 25$
JSR PC,.CEP
25$: PCRLF
JMP $CONSL
.CEP: PMSG <, CACHE >
MOV R2,R0
PNTNBR ;PRINT CACHE ENABLE DIGIT
RTS PC
;AC BLOCK SELECTION
;SETS UP "PAGDFL" WORD USED BY "DATAO PAG,0"
;DURING "STD,STM,STL & DDT" START COMMANDS
;SAME "PAGDFL" WORD USED BY "DATAO PAG,20"
;DURING AC BLOCK SELECTION COMMAND
.AC: DFLEGAL
MOV #PAGDFL+2,R5
TTISDL ;ALLOW FOR "ACBLK" OR "AC BLK"
BCC 5$ ;NUMBER
CMPB #'B,R0
BNE 5$
TTICHR
CMPB #'L,R0
BNE 5$
TTICHR
CMPB #'K,R0
BNE 5$
TTISDL ;ANY NUMBER ?
BCS 4$ ;NO, PRINT PRESENT SELECTION
TTISDO ;GET SELECTION DIGIT
CMP R0,#7 ;MUST BE 0 TO 7
BGT 5$
BEQ 3$ ;IF BLK #7, GIVE UCODE WARNING
1$: PUSH R0
PMSG <PREV AC BLK >
MOV (R5),R0
SHIFTR
11.
PNTNBR
PNTCI
",
POP R0
SHIFTL ;PLACE SELECTION DIGIT IN BITS 6-8
11.
BIC #034000,(R5)
BIS R0,(R5) ;INSERT IN PAGE DEFAULT WORD
4$: PMSG <SELECTED AC BLK >
MOV (R5),R0 ;PRINT PRESENT AC BLOCK SELECTION
SHIFTR
11.
PNTNBR
PCRLF
EXAMT ;SAVE MEM LOCATION 20
20
$SAV20
BCS 6$
DPOSVT ;PUT DATAO PAG ARGUMENT IN 20
20
PAGDFL
BCS 6$
MOV #DATPAG,R0
EXCT ;EXECUTE DATAO PAG
BCS 6$
DPOSVT ;RESTORE 20
20
$SAV20
BCS 6$
JMP $CONSL
3$: PUSH R0
PMSG <UCODE BLK\>
POP R0
BR 1$
6$: PMSG <?SELECTION ERR>
JMP $CNTLC
5$: JMP $PARAM ;ERROR
DATPAG: IO10 DATAO PAG,,20 ;SELECT AC BLOCK
.EVEN
;START PDP10 AT ADDRESS SPECIFIED AS LOWER 18 BITS OF 36-BIT ARGUMENT.
$ST: TTISDL
BCS 4$ ;NON-NUMBER
TTIS36
$$ST=.
CLR R5
5$: MOV #2,R2 ;STUFF ADDRESS INTO JRST
MOV #$$STJRS,R1
41$: BICB #377,(R1) ;CLEAR OLD
BISB (R0)+,(R1)+ ;STUFF NEW
DEC R2
BNE 41$ ;DO TWO BYTES
BISB (R0),(R1) ;DO LAST TWO BITS
3$: TST R5 ;ADDRESS START ?
BNE 31$ ;NO, PERFORM FULL SYSTEM RESET
BR 11$ ;YES, JUST DO JRST
1$: PUSH R0
EXCT ;EXECUTE A TEN INSTR
BCS $STERR
POP R0
ADD #5,R0
DEC R1
BNE 1$ ;DO ANOTHER
JSR PC,$TI36C ;ZERO SELECTED AC BLOCK
MOV #$DRAM,R1
MOV #16.,R0 ;FROM AC0 TO AC17
D10ZRO ;NECESSARY FOR FM PARITY
BCS $STERR
11$: MOV #$$STJRS,R0
EXCT ;EXECUTE JRST TO START ADR
BCS $STERR
CLR TENTTY ;TURN OFF "TENCHR" ROUTINE
JSR PC,$CMCLR ;CLEAR COMMON STORAGE
MOV #100.,$ENDCT ;REPORT EOP EVERY 100
JMP $RNN
31$: SM ;START MACHINE
BCS $STERR
DPOSVT ;DEPOSIT "DATAO PAG,0" ARGUMENT
0 ;IN AC0, SELECTS CURRENT AC USAGE
PAGDFL
BCS $STERR
SETFLG ;SET TEN RUN FLAG
TENRUN
TENSW ;DEPOSIT PDP-10 SWITCHES
BCC 32$
JMP C10SWE ;SWITCH ERROR
32$: MOV #4.,R1
MOV #$STTB1,R0
BR 1$
4$: CMPB #'D,R0 ;IF "STD", START 10 DIAGNOSTIC
BNE 6$
MOV #TDIAG,R0
7$: TTITRM
$$$ST=.
MOV #-1,R5
BR 5$
6$: CMPB #'L,R0 ;IF "STL", START PDP-10 LOADER
BNE 8$
MOV #TLDR,R0
BR 7$
8$: CMPB #'M,R0 ;IF "STM", START PDP-10 MONITOR
BNE 3$
MOV #TMON,R0 ;IF NONE, START AT LAST START ADR
BR 7$
$STERR: JMP .XCTER
HRRI=541
HRLZI=515
JRST=254
DTE=200
$STTB1: IO10 CONO APR,,267760 ;RESET APR
IO10 CONO PI,,10000 ;PI SYSTEM CLEAR
IO10 CONO PAG,,0 ;PAGING SYSTEM CLEAR
IO10 DATAO PAG,,0 ;USER BASE CLEAR & AC SELECT
.EVEN
.CNERR: JMP $PARA
.SBTTL PDP-10 DEPOSIT AND EXAMINE CONSOLE FUNCTIONS
.DP: MOV #.DPXAD,R5
TTISDL
BCS .DPS
TTIS36
MOV (R0)+,(R5)+ ;LOW ADDRESS
MOV (R0),(R5) ;HIGH ADDRESS
.DPNX1: TST -(R5)
.DPCOM: TTIS36 ;GET DATA
MOV R5,R1 ;PTR TO ADR
JSR PC,$TENRN
DPOS ;DO IT
BCS 1$
JMP $KONSL
1$: PMSG <?DM>
JSR R1,$DFTM1
.DPNX: MOV #.DPXAD,R5
ADD #1,(R5)+ ;BUMP LOW
ADC (R5) ;CARRY TO HIGH
BR .DPNX1
.DPS: BVS .DPCOM ;COLON, USE PRESENT ADDRESS
BR .CNERR
$TENRN: BIT #ERRSTP,@.DIAG1 ;TEN CLOCK RUNNING ?
BEQ 1$ ;YES, OK
JMP TENCERR ;NO, REPORT IT
1$: RTS PC
.EXM: MOV #.DPXAD,R5
CLR R3
TTISDL
BCS .EXMSP ;NON-NUMBER
TTIS36 ;GET PDP-10 ADDRESS
MOV (R0)+,(R5)+ ;SAVE LOW 16 BITS
MOV (R0),(R5) ;SAVE HIGH BITS
TST -(R5)
TTIBRK ;GET BREAK
BCS .CNERR
CMPB #',,R0
BNE .EXCOM
COM R3 ;COMMA, MULTIPLE PRINT
PNORML
TTIS36 ;GET ENDING ADDRESS
MOV (R0),R4 ;SAVE LOW 16 BITS
.EXCOM: MOV R5,R0
JSR PC,$TENRN
EXAM
BCS 3$
5$: TSTB RPTFLG
BNE 1$
MOV R5,R0
PNTADR
PNTBAK ;BACKUP POINTER TO WIPE OUT SPACE
PSLASH
MOV #$DRAM,R0
PNT36
TST R3 ;DOING MULTIPLE PRINT ?
BEQ 2$
PCRLF
CMP (R5),R4
BEQ 2$
INC (R5) ;INCREMENT LOW 16 BITS, 64K
BR .EXCOM ;DO NEXT ADDRESS
2$: PCRLF
1$: JMP $KONSL
3$: BMI 4$
PMSG <?EM>
JSR R1,$DFTM1
4$: $PMSGR
$EBPAR ;E-BUS PARITY ERROR
BR 5$
.EXMSP: BVS .EXMNX ;COLON OR SLASH, EXAMINE NEXT
BNE .EXCOM ;NONE, EXAMINE SAME
SUB #1,(R5)+ ;UPARROW, EXAMINE PREVIOUS
SBC (R5)
BR .EXMN1
.EXMNX: MOV #.DPXAD,R5
ADD #1,(R5)+
ADC (R5)
.EXMN1: INC $INPTC
CLR R3
TST -(R5)
BR .EXCOM
;MEMORY ZERO
; "MZ ADR,COUNT"
.MZ: DFLEGAL ;FUNCTION LEGAL ?
TTIS36 ;INPUT PDP-10 START ADDRESS
MOV R0,R1
TTISDL
BCS 1$
TTIOCT ;INPUT 16BIT MEMORY ZERO COUNT
BCS 1$
2$: D10ZRO ;ZERO MEMORY
BCS 3$
JMP $KONSL
1$: MOV #1,R0 ;NO COUNT SPECIFIED
BR 2$ ;CLEAR ONE WORD
3$: PMSG <?MZ>
JSR R1,$DFTM1
.SBTTL CONSOLE IDLE RUN LOOP
;PROVIDES PDP-10 SUPPORT WHEN "TENRUN" SET
;AND ADDITIONALY PDP-10 MONITOR SUPPORT IF "MONMODE" SET
$RUNLP: TSTB TENRUN ;PDP-10 RUN TIME SUPPORT ?
BNE 1$
22$: JMP $TTILIN ;NO, CONSOLE COMMAND INPUT
1$: CLR DDTTM2 ;SETUP DDT MODE TIMEOUT
2$: BIT #KLRUN,@.DIAG1
BNE 3$
JMP TENDEAD ;PDP-10 HALTED
3$: BIT #ERRSTP,@.DIAG1 ;PDP-10 CLOCK ERROR STOP ?
BEQ 31$
JMP TENCERR ;YES, REPORT
31$: BIT #TO11DB,@.STDTE
BNE TENCMD ;PDP-10 REQUESTED SERVICE
4$: JSR PC,C10COP ;PERFORM CLOCK OPERATIONS
5$: TST MONMODE ;MONITOR SUPPORT MODE ?
BEQ 20$ ;NO
6$: JSR PC,$TIRDY ;TTY INPUT FLAG SET ?
BCC MTTYIN ;YES, SEND CHAR TO 10
7$: TST MTTYOF ;TTY OUTPUT IN PROGRESS ?
BEQ 2$ ;NO
8$: JSR PC,$TORDY ;TTY OUTPUT COMPLETED ?
BCC MTTYOC ;YES, NOTIFY 10
BR 2$ ;STAY IN MONITOR LOOP
20$: TST DDTFLG ;PDP-10 DDT INPUT MODE ?
BEQ 21$ ;NO
23$: DEC DDTTM2 ;WAITED LONG ENOUGH ?
BNE 2$ ;NOT YET
CLR DDTFLG ;YES, REVERT TO CONSOLE MODE
21$: JSR PC,$TIRDY ;ANY TTY INPUT YET ?
BCS 2$ ;NO, STAY IN RUN LOOP
JMP $TILRN ;YES, GO INPUT
;MONITOR TELETYPE CHARACTER INPUT
MTTYIN: MOVB $TICHR,R0 ;GET INPUT CHAR
BIC #177600,R0 ;STRIP TO 7 BITS
CMPB R0,#MSWCHR ;MONITOR TO "KLDCP" SWITCH CHAR ?
BNE 1$
CLR MONMODE ;YES, CLEAR MONITOR SUPPORT MODE
PMSG <\KLDCP\. ←>
BR $RUNLP ;STAY IN PDP-10 SUPPORT RUN LOOP
1$: MOV R0,TENDAT
DPOSVT ;SEND CHAR TO TEN
$DTF11
TENDAT
BCS MTTYER ;FAILED
D10MON ;SET -1 TO 10 TTY INPUT FLAG
$DTMTI
BCS MTTYER
C10DN1: MOV #INT10S,@.STDTE ;DING TEN
BR $RUNLP
MTTYER: JMP C10TIE
;MONITOR TELETYPE OUTPUT COMPLETE
MTTYOC: D10MON ;SET -1 TO 10 TTY OUTPUT DONE FLAG
$DTMTD
BCS MTTYER
CLR MTTYOF ;CLEAR OUTPUT IN PROGRESS
BR C10DN1 ;CAUSE DTE20 INTERRUPT
;MONITOR TELETYPE OUTPUT ROUTINE
MTTYO: MOV R5,R0 ;GET OUTPUT CHAR
BIC #177400,R0 ;STRIP TO 8 BITS, 10 DOES PARITY
MOVB R0,$TOCHR ;PRINT CHAR
JSR PC,$TOOUT
SETFLG
MTTYOF ;SET OUTPUT IN PROGRESS FLAG
MTTYX: BR C10DON ;ALLOW 10 TO CONTINUE
;MONITOR MODE CONTROL
MTTYC: SETFLG ;SET
MONMODE
BR MTTYX
MTTYCF: CLR MONMODE ;CLEAR
BR MTTYX
$MC: SETFLG ;CONSOLE MONITOR CONTINUE
MONMODE
BR $$TDX
MTTYS: MOV MONMODE,R0 ;SEND 10 MONITOR TTY STATE
JMP C10TIX
.SBTTL PDP-10 RUN TIME SUPPORT
TENCMD: EXAMT ;GET COMMAND CODE
$DTCMD
$ECMD
BCC 1$
BPL 2$ ;EXAMINE FAILED
$PMSG
$EBPAR ;E-BUS PARITY ERROR
2$: BR C10DNX
1$: MOV $ECMD,R5
MOV R5,R1
SWAB R1
BIC #177760,R1
SL R1,1
JMP @CMD10T(R1) ;DISPATCH TO ROUTINE
CMD10T: C10TO ;TTY OUT
C10PRG ;PROGRAM CONTROL
C10CLK ;CLOCK
C10SW ;SWITCHES
C10TO ;TTY OUT
C10TI ;TTY IN
C10PNT ;PRINT CONTROL
C10DDT ;DDT INPUT MODE
MTTYO ;MONITOR TTY OUTPUT
MTTYC ;MONITOR TTY MODE CONTROL ON
MTTYCF ;MONITOR TTY MODE CONTROL OFF
MTTYS ;MONITOR TTY STATE
C10DNX ;14-17 UNUSED NOW
C10DNX
C10DNX
C10DNX
C10DON: MOV #INT11C,@.STDTE ;CLEAR DONG
D10MON ;SET -1 TO 10 "$DTFLG"
$DTFLG ;DTE20 OPERATION COMPLETE FLAG
BCS C10DNX
JMP $RUNLP ;WAIT FOR NEXT COMMAND
C10DNX: CLR TENRUN
PMSG <?10 CMD>
JSR R1,$DFTM1
TENCERR:CLR TENRUN
CLR KLCLKR ;CLEAR TEN RUNNING
PFORCE
PMSG <\KL10 CLOCK ERROR STOP>
DFRDT
106
BIT #BIT5,@.DAT3 ;FIELD SERVICE ?
BEQ 1$
$PMSG
$PEFS ;FS PROBE
1$: DFRDT
105
BIT #BIT5,@.DAT3 ;FM PARITY ?
BEQ 2$
$PMSG
$PEFM ;FM PARITY
2$: DFRDT
104
BIT #BIT5,@.DAT3 ;CRAM PARITY ?
BEQ 3$
$PMSG
$PECR ;CRAM PARITY
3$: DFRDT
103
BIT #BIT5,@.DAT3 ;DRAM PARITY ?
BEQ 4$
$PMSG
$PEDR ;DRAM PARITY
4$: PNTCPU ;PRINT ALL CPU INFORMATION
BR $$TDX
TENDEAD: CLR TENRUN ;CLEAR TEN RUN FLAG
PFORCE
PMSG <\KL10 HALTED >
SETFLG
ALLFLG
JSR PC,$ALLPC
JSR PC,$ALVMA
PCRLF
$$TDX: JMP $CONSL
C10TO: SETFLG
TENTTY ;ALLOW "TENCHR" TO OPERATE
MOV #$TNBUF,$TNPTC ;RESET 10 INPUT POINTERS
MOV #$TNBUF,$TNPTR
MOV R5,R1 ;GET ASCII CHAR
PLDBUF ;PUT IN TTY OUT BUFFER
BR C10DON
C10TI: CLR DDTFLG
CMP #$OUTBF,$OUTPT ;ANY OUTPUT WAITING ?
BNE C10TIZ ;YES
11$: CMP $TNPTC,$TNPTR ;CURRENT BUFFER EMPTY ?
BGE C10TIZ ;YES
MOV $TNPTC,R1 ;GET CHAR POINTER
MOVB (R1)+,R0 ;FETCH CHAR FROM 10 BUFFER
MOV R1,$TNPTC
C10TIX: MOV R0,TENDAT ;PUT CHAR IN 28-35 OF TEN WORD
DPOSVT ;DEPOSIT IN FROM 11 WORD
$DTF11
TENDAT
BCC C10DON
C10TIE=.
1$: PMSG <?10 TTI>
BR $$C1
C10TIZ=.
2$: TTILIN ;INPUT LINE FOR TEN
BCS 5$ ;NO RESPONSE
MOV #$TNBUF,R1
3$: TTICHR ;GET CHAR FROM INPUT
BCS 4$ ;EMPTY
MOVB R0,(R1)+ ;PUT IN TEN BUFFER
BR 3$
4$: MOV R1,$TNPTR ;UPDATE 10 EOL POINTER
MOV #$TNBUF,$TNPTC ;SET PICKUP POINTER TO START
BR C10TI ;GO SEND FIRST CHAR TO TEN
5$: CLR R0 ;NULL = TIMEOUT
BR C10TIX
C10PNT: MOV R5,R1 ;GET CONTROL BYTE
BIC #177400,R1
MOV R1,$FORCE ;PUT IN FORCE FLAG
CLR DDTFLG ;CLEAR DDT MODE
C10X: BR C10DON
C10SW: DPOSVT ;LOAD SWITCHES INTO FROM 11 WORD
$DTF11
SWS10
BCC C10X
C10SWE=.
1$: PMSG <?10 SW>
$$C1: JMP $CNTLC
$SW: MOV #SWS10,R5
TTISDL
BCS 1$ ;NON-NUMBER, TYPE PRESENT
TTIS36
MOV (R0)+,(R5)+ ;PUT IN SWITCH WORD
MOV (R0),(R5)
2$: TENSW ;DO PDP-10 SWITCHES
BCS C10SWE ;ERROR
JMP $KONSL
1$: PFORCE
MOV R5,R0 ;PRINT CURRENT SWITCHES
PNT36
PCRLF
BR 2$
C10DDT: SETFLG
DDTFLG ;SET FOR DDT MODE INPUT
PFORCE ;SET FORCED PRINTOUT
CMP #$OUTBF,$OUTPT ;ANY OUTPUT WAITING ?
BEQ 2$ ;NO
SETFLG
$TTLKF ;PREVENT INPUT CHECKS
PRINTT ;YES, PRINT IT
2$: TTLOOK ;GET INPUT CHAR
BCS 3$ ;NOTHING THERE, SEND ZERO
3$: CMPB R0,#CNTRLX ;CONTROL X, NEXT LINE IS CONSOLE CMD
BNE C10TIX
PNTCI
"↑X
JMP $TTILIN
C10PRG: MOV R5,R1 ;GET CONTROL FIELD
BIC #177760,R1
SL R1,1
JMP @C10PT(R1) ;DISPATCH
C10PT: TENDEAD ;HALT
C10P1 ;FATAL
C10P2 ;ERROR HALT
C10P3 ;END OF PROGRAM
C10P4 ;END OF PASS
C10P5 ;GIVE PDP-10 CLOCK DEFAULT WORD
DIASEL ;"DIAMON" FILE SELECTION
DIARD ;"DIAMON" FILE READ
P10CMD ;PDP-10 PROGRAM COMMAND
C10DNX
C10DNX
C10DNX
C10DNX
C10DNX
C10DNX
C10DNX
C10P2: CLRB TENRUN
C10P1: CLR TENCLK
C10X1: BR C10X
C10P3: CLRB TENRUN ;TURN OFF TEN RUNNING
ERREOP ;END OF PROGRAM
C10P4: EOP
BR C10X
C10P5: DPOSVT
$DTF11
CLKDFL
BCS C10CER
BR C10CX
C10CLK: MOV R5,R1
BIC #177774,R1
SL R1,1
JMP @C10CPT(R1)
C10CPT: C10C0 ;DISABLE
C10C1 ;ENABLE
C10C2 ;ENABLE & WAIT
C10C3 ;READ PDP-10 CLOCK COUNT
C10C0: CLR TENCLK
C10CX: BR C10X1
C10C3: DPOSVT ;LOAD CLOCK COUNT INTO FROM 11 WORD
$DTF11
CLKCNT
BCS C10CER ;ERROR
BR C10CX
C10C1: SETFLG
TENCLK
C10CX1: BIC #200,KWLKS
1$: TSTB KWLKS ;WAIT FOR CLOCK
BPL 1$ ;THEN CLEAR TO ALLOW FOR
BIC #200,KWLKS ;16MS BEFORE 1ST CLOCK
MOV #CLKCNT,R0 ;INIT CLOCK COUNTER
CLR (R0)+
CLR (R0)+
CLR (R0)
BR C10CX
C10C2: EXAMT ;GET WAIT COUNT FROM TO 11 WORD
$DTT11
C10CW
BCS C10CER
MOV #177400,TENCLK
BR C10CX1
C10COP: TSTB KWLKS ;CLOCK FLAG SET ?
BPL 1$ ;NO, RETURN
BIC #200,KWLKS ;CLEAR FLAG
INC $TTYTIM ;COUNT TTY TIMER
CMP SWR,$$SWR ;PDP-11 CONSOLE SWITCHES CHANGED ?
BEQ 3$ ;NO
PUSH R0
TENSW ;YES, DO PDP-10 SWITCHES
BCS C10CER ;ERROR
POP R0
3$: TSTB TENRUN ;IS 10 RUNNING ?
BEQ 1$ ;NO
TST TENCLK
BEQ 1$ ;CLOCK NOT ENABLED
ADD #1,CLKCNT ;INCREMENT PDP-10 CLOCK COUNT
ADC CLKCNT+2
ADC CLKCNT+4
TSTB TENCLK ;DOING WAIT ?
BNE 2$ ;NO
CMP CLKCNT,C10CW ;WAITED LONG ENOUGH ?
BNE 1$ ;NOT YET
2$: PUSH <R0,R1>
D10MON ;SET -1 TO 10 "$DTCLK"
$DTCLK
BCS C10CER
MOV #INT10S,@.STDTE ;DING TEN
POP <R1,R0>
1$: RTS PC
C10CER: CLR TENCLK
PMSG <?10 CLKOP>
JMP $CNTLC
;PDP-10 SWITCH REGISTER
$TENSW: MOV SWR,$$SWR ;GET PDP-11 SWITCHES
MOV $$SWR,$SWS10+2
MOV #$SWS10,R1 ;POSITION FOR 0 TO 15 OF
MOV #4,R3 ;PDP-10 SWITCH REGISTER
PROL36
MOV #$SWS10+2,R4
MOV #SWS10+2,R5
BIC #17,(R4) ;CLEAR 16-19 FROM NEW
BIC #177760,(R5) ;CLEAR 4-15 FROM OLD
BIS (R4)+,(R5)+ ;INSERT BITS 4-15
BIC #177760,(R4) ;CLEAR HI JUNK FROM NEW
BIC #17,(R5) ;CLEAR 0-3 FROM OLD
BIS (R4),(R5) ;INSERT BITS 0-3
TSTB TENRUN ;PDP-10 RUNNING ?
BEQ 1$ ;NO
DPOSVT ;DEPOSIT PDP-10 SWITCH REGISTER
$DTSWR ;IN DTE20 COMM AREA
SWS10
BCS 2$ ;ERROR
$TCX=.
1$: EXIT
2$: EXITERR ;RETURN
;PDP-10 LAST TYPED CHARACTER ROUTINE
$TENCHR:TSTB TENRUN ;PDP-10 RUNNING ?
BEQ $TCX ;NO
TST TENTTY ;TTY DEPOSIT ALLOWED ?
BEQ $TCX ;NO
PUSH R0
DPOST ;YES, SEND LAST TYPED CHAR
$DTCHR
$TNCHR
POP R0
BR $TCX ;DON'T CARE IF FAILED
.SBTTL PDP-10 PROGRAM COMMAND
P10CMD: MOV #-1,R0 ;USE OUTPUT BUFFER
PRGCMD ;& PROGRAM COMMAND
BCS DIANF ;C-BIT SET, ERROR
BR DIAFND ;PASSED
.SBTTL "DIAMON" FILE SELECTION AND READ ROUTINES
DIASEL: MOV #$INBUF,R1 ;PUT "P" & "SPACE" FIRST
MOV #"P ,(R1)+ ;IN CASE ACT10 LOAD
MOV #$OUTBF,R0 ;TRANSFER "DIAMON" FILE.EXT
MOV R0,$OUTPT ;TO INPUT BUFFER
JSR PC,$DIASX
MOV #$INBUF+2,$INPTC ;SET PICKUP POINTER
NAMEXT ;SETUP FILE NAME.EXT
SETFLG
LDCNTL ;SET LOAD CONTROL TO HELP
SETFLG
DIAFLG ;SET PROCESSING TO "DIAMON" MODE
JMP DEVFIL ;GO LOOKUP & READ FIRST ASCII LINE
;RETURN HERE WHEN FILE FOUND
DIAFND: CLR R0 ;SET FOUND INDICATOR
$DIAFX: JMP C10TIX ;USE 10 TTY INPUT ROUTINE
;RETURN HERE WHEN FILE NOT FOUND
DIANF: MOV #-1,R0 ;SET NOT FOUND INDICATOR
BR $DIAFX
;"DIAMON" FILE READ
DIARD: JSR PC,$TI36C ;CLEAR 36 BIT WORD STORAGE
CMP $INPTC,$INPTR ;ANY CURRENT INPUT ?
BLE DIARNL ;NO
1$: JMP ACTLD2 ;GO READ NEXT INPUT LINE
DIARNL=. ;RETURN HERE WITH NEW LINE SETUP
2$: MOV #5,R2 ;5 ASCII CHARS PER 36 BIT WORD
3$: CMP $INPTC,$INPTR ;EOL ?
BGT 4$ ;YES
MOVB @$INPTC,R0 ;GET FILE LINE CHAR
INC $INPTC
MOV #7,R1
JSR PC,SHFT36 ;SHIFT 36 BIT WORD LEFT 7
BISB R0,$DRAM ;INSERT NEW ASCII BYTE
DEC R2 ;DONE 5 CHARS ?
BGT 3$ ;NOT YET
4$: CLR R1 ;LEFT JUSTIFY FOR PDP-10 ASCII
JSR PC,SHFT36
DPOSVT ;LOAD INTO FROM 11 WORD
$DTF11
$DRAM
BCC 6$ ;OK
5$: PMSG <?DIAMON XFER>
JMP $CNTLC
DIAEOF=. ;DIAMON READ END-OF-FILE
D10MON ;SET FROM 11 WORD -1
$DTF11
BCS 5$ ;ERROR
6$: JMP C10DON ;TELL 10 TO CONTINUE
.SBTTL PDP-11 CONSOLE FUNCTIONS
;START PDP11 AT ADDRESS GIVEN
.SE: TTISDL
BCS 2$ ;NON-NUMBER
1$: TTOCTE ;READ AN OCTAL ADDRESS
4$: MOV R0,SEADR ;GO TO ADDRESS IN R0
JMP SRT11
2$: CMPB #'D,R0 ;"D", START DIAGNOSTIC
BEQ 3$
CMPB #'C,R0 ;"C", START CONSOLE
BNE $$CMDE
MOV #PRGSRT,R0
BR 4$
3$: MOV #3000,R0
BR 4$
;EXAMINE ELEVEN AT ADDRESS GIVEN
.EE: MOV #1,R5
BR .EEB
.EB: CLR R5
.EEB: MOV #.EADR,R2
CLR R3
TTISDL
BCS 6$ ;NON-NUMBER
TTCOCT ;READ AN OCTAL ADDRESS
MOV R0,R1
MOV R0,(R2) ;SAVE ADR FOR DEPOSIT
TTIBRK ;GET BREAK CHAR
BCS $$PARA
CMPB #COMMA,R0
BNE 2$
INC R3 ;SET MULTIPLE PRINT FLAG
PNORML
TTCOCT ;GET LAST ADDRESS
MOV R0,R4 ;SAVE END ADR
2$: BIC R5,R1 ;IF WORD, MAKE EVEN
21$: MOV R1,R0
MOV R1,(R2) ;SAVE ADDRESS
PNTOCT ;PRINT ADDRESS
PSLASH
1$: TST R5 ;BYTE ?
BEQ 3$ ;YES
MOV (R1),R0
PNTOCT ;PRINT CONTENTS OF ADDRESS
BR 4$
3$: MOVB (R1),R0
BIC #177400,R0
PNTOCS ;PRINT BYTE CONTENTS
4$: TST R3
BEQ 5$
PCRLF
CMP R1,R4
BHIS 5$
INC R1 ;INCREMENT ADDRESS
ADD R5,R1 ;IF WORD, INC BY 2
BR 2$
5$: PCRLF
JMP $KONSL
6$: BEQ 7$ ;UPARROW
BVC 61$ ;NONE
INC (R2) ;EXAMINE NEXT 11 ADDRESS
ADD R5,(R2)
61$: MOV (R2),R1
INC $INPTC ;ADVANCE PAST TERMINATOR
BR 2$
7$: DEC (R2)
SUB R5,(R2)
BR 61$
;ZERO ELEVEN
.ZE: TTOCTE ;GET START ADDRESS
MOV R0,R5
TTCOCT ;GET END ADDRESS
1$: CLR (R5)+ ;ZERO 11
CMP R5,R0 ;COMPLETED ?
BLOS 1$ ;NO
JMP $CONSL
;DEPOSIT ELEVEN DATA
.DE: MOV #1,R5 ;DEPOSIT 11 WORD
BR .DEB
.DB: CLR R5 ;DEPOSIT 11 BYTE
.DEB: MOV #.EADR,R2
TTISDL
BCS 5$ ;NON-NUMBER
TTCOCT ;READ OCTAL ADDRESS
1$: MOV R0,R1
TST R5
BEQ 2$
BIT R5,R0
BNE $$PARA ;WORD, ODD ADDRESSES ILLEGAL
2$: TTISDL
BCS $$CMDE
TTCOCT ;GET DATA
MOV R1,(R2)
TST R5 ;BYTE ?
BEQ 3$
MOV R0,(R1) ;STOW IT
BR 4$
3$: MOVB R0,(R1) ;STOW 11 BYTE
4$: JMP $KONSL
5$: BVC $$CMDE ;IF COLON, USE PREVIOUS EXAMINE ADDRESS
MOV (R2),R0
BR 1$
$$PARA: JMP $PARA
$$CMDE: JMP $CMDE
.SBTTL KL10 MONITOR & ACT10 COMMAND ROUTINES
$VERIFY:SETFLG
VERIFY
PNORML
BR $PROG1
$LDT: MOV #1,LDOVRD ;LOAD TEN, OVERRIDE EXT
BR $PROG2
$LDE: MOV #2,LDOVRD ;LOAD ELEVEN, OVERRIDE EXT
BR $PROG2
$LDR: MOV #3,LDOVRD ;LOAD RAM, OVERRIDE EXT
BR $PROG2
$LDB: MOV #6,LDOVRD ;LOAD ELEVEN BIN, OVERRIDE EXT
BR $PROG2
$PROG: CLR LDOVRD ;CLEAR OVERRIDE
$PROG2: CLR VERIFY
$PROG1: CLR LDCNTL ;CLEAR LOAD CONTROL FLAG
CLR SRTFLG ;CLEAR SELF START FLAG
CLRB CONSOL-1 ;OVERLAY INUSE INDICATOR
BR $HELP1 ;GO LOAD PROGRAM
$JFILE: SETFLG
JFILEF ;SET DOUBLE INDIRECT FLAG
CLR PRGRUN ;CLEAR PROGRAM RUNNING FLAG
MOV #TOUTBF+5000,IFINP ;SETUP STORAGE POINTER
BR $IIX
$IFILE: MOV #TOUTBF,IFINP ;SETUP STORAGE POINTER
$IIX: CLR PCMDFLG ;CLEAR PROGRAM COMMAND
SETFLG
IFILEF ;SET INDIRECT FILE FLAG
CLR @IFINP ;CLEAR 1ST BUFFER WORD
CLRB CONSOL-1 ;OVERLAY INUSE INDICATOR
$HELP: CLR LDOVRD ;CLEAR LOAD OVERRIDE FOR H,I,J
SETFLG
LDCNTL ;SET LOAD CONTROL TO "HELP"
PNORML
TST DEVTYP
BPL $HELP1
JMP ACTFIL ;ACT10 HELP
$HELP1: JMP DVLOAD ;RP04/DECTAPE/FLOPPY HELP
$AT: TTITRM
SETFLG
DEVTYP ;SET ACT10 MODE
COMCLR ;CLEAR COMMUNICATIONS
BR $DTX
$DT: CLR FLOPPY
TTISDL
BCS $DTC ;LETTER
TTISDO ;GET UNIT SELECTION DIGIT
CMP R0,#7 ;MUST BE 0 TO 7
BGT $CMDE
SWAB R0 ;PUT IN PROPER PLACE FOR TC11
MOV R0,DTUNIT ;SAVE IT
$RXX: CLR DEVTYP ;SET DECTAPE MODE
$DTX: JMP $KONSL
$RX: SETFLG
FLOPPY
TTISDL
BCS $DTC ;LETTER
TTISDO ;GET SELECTION DIGIT
CMP R0,#1 ;MUST BE EITHER 0 OR 1
BGT $CMDE
BNE 1$
MOV #RXU1,R0
1$: MOV R0,RXUNIT ;SAVE FOR RX11/RX01 FLOPPY
BR $RXX
$DTC: CMP #"CO,$INBUF+2 ;IS COMMAND 'DTCOPY'/'RXCOPY' ?
BNE 1$
CMP #"PY,$INBUF+4
BNE 1$
JSR PC,$KLUCK ;UTILITY IN CORE ?
TST FLOPPY
BEQ 2$
JMP @RXCOPY ;FLOPPY COPY
2$: JMP @DTCOPY ;YES
1$: JMP $CMDER
$GO: INC $INPTC
$$GO: MOV PGOCTL,R0 ;GO, START PROGRAM
JMP @LDSTRT(R0)
LDSTRT: SRT11X
SRT10
$JC: TTITRM
SETFLG ;SET J FILE FLAG TO CONTINUE
JFILEF ;INTERRUPTED J FILE PROCESS
BR $DTX
SRT11X: MOV PGOADR,SEADR
SRT11: TST SEADR
BEQ 1$ ;IF ADR 0, START AT 3000
BIT #1,SEADR
BNE ADRERR ;ODD ADDRESSES NOT ALLOWED
2$: JSR PC,$CMCLR ;CLEAR COMMON STORAGE
CLR IFILEF ;END INDIRECT PROCESS
SETFLG
PRGRUN
MOV #STACK-2,R0 ;PASS STACK BASE ADR IN R0
MOV R0,SP ;RESET STACK
JMP @SEADR ;START 11 PROGRAM AT LOAD ADDRESS
1$: MOV #3000,SEADR
BR 2$
;ACT10 TIME REQUEST
$TIME: TTBTRM
TST DEVTYP
BPL $TIME1 ;ONLY LEGAL IN ACT10 MODE
COMENQ ;REQUEST APT10 SERVICE
MOV #$INBUF,R0
COMCMD ;SEND COMMAND
$PMSG ;PRINT INPUT LINE
CINBF
COMCLR
$TIME3: JMP $CONSL
$TIME1: JMP NONACT ;NON ACT10
$LOGO:
$LOGIN: TST DEVTYP ;ONLY LEGAL IN ACT10 MODE
BPL $TIME1
TTITRM
COMENQ ;REQUEST SERVICE
MOV #$INBUF,R0
COMCMD ;SEND COMMAND
COMEOT
BR $TIME3
SRT10: MOV #TGOADR+2,R0
MOV #PGOADR+2,R1 ;PUT LOAD ADR IN 10 GO ADR
MOV (R1),(R0)
MOV -(R1),-(R0)
JMP $$$ST ;GO TO 10 START ROUTINE
$COMNT: TST DEVTYP ;ACT10 MODE ?
BPL 1$ ;NO, LOCAL ONLY
COMENQ ;REQUEST APT10 SERVICE
MOV #$INBUF,R0
COMCMD ;SEND MESSAGE
COMEOT
1$: BR $TIME3 ;BACK TO CONSOLE
$BOOT:
$SCRPT:
$MSCP:
$GSCP:
$BOOTT: JMP $CMDER
ADRERR: PMSG <?ADR>
BR COMNER
$PARA: PMSG <?PARAM>
BR COMNER
$CMDE: JMP $CMDER
NONACT: PMSG <?ACT10>
BR COMNER
NORESP: PMSG <?RESPONSE>
COMNER: JMP $CNTLC
;REINITIALIZE SYSTEM
.RI: CLR $ONETM
JMP START
.SBTTL LINE PRINTER SELECTION ROUTINE
$LPT: PMSG <LP, Y OR N ? - ←>
TTILIN
TTIYES
BCS $LPT ;JUNK
BMI 10$ ;NO
MOV #NOLP,ERRVEC ;DO WE HAVE A LINE PRINTER CONTROLLER ?
MOV $LPS,R0
TST (R0)
TST R0
BNE 1$ ;LP11
MOV #LP20A,R0
TST (R0)
TST R0
BNE 2$ ;LP20A
MOV #LP20B,R0
TST (R0)
TST R0
BNE 2$ ;LP20B
MOV #$TIMOT,ERRVEC
PMSG <?NO LPT>
JMP $CNTLC
1$: CLR LPTYPE ;LP11 - TYPE = 0
BR 3$
2$: MOV R0,LPTYPE ;LP20 - TYPE = CONTROLLER BASE ADDRESS
3$: MOV #$TIMOT,ERRVEC
SETFLG
LPTFLG
TST LPTYPE
BNE 5$
TST @$LPS ;LP11 - LPT OK ?
BMI 20$ ;NO
4$: JMP $CONSL
5$: JSR PC,LP20INI ;INITIALIZE LP20
BCS 20$ ;ERROR
BR 4$
10$: CLR LPTFLG ;TURN OFF LINE PRINTER
BR 4$
20$: PMSG <?LP ERR\>
BR $LPT
NOLP: CLR R0 ;NO LP CONTROLLER BUS TRAP
RTI
.SBTTL LP20 INITIALIZATION ROUTINE
LP20INI:MOV LPTYPE,R5 ;SETUP BASE ADDRESS
MOV #LPLINI!LPRERR,(R5) ;CLEAR LP20
MOV #VFUDAT,R0 ;SETUP VFU BUFFER
MOV R0,LPBSAD(R5) ;SETUP BUFFER ADDRESS
MOV #037756,(R0)+ ;VFU LOAD CODE & ALL CHANS
MOV #77,(R0)+
MOV #100,R1 ;SET FOR 64 LINES ON PAGE
1$: CLR (R0)+
DEC R1
BNE 1$
MOV #167400,(R0) ;VFU STOP LOAD CODE
MOV #-206,LPBCTR(R5) ;206 BYTE XFER
MOV #LPVLOD!LPPENB!LPGO,(R5) ;VFU LOAD & GO
JSR PC,LP20DN ;WAIT FOR DONE
BCS 3$ ;ERROR
CLR LPCBUF(R5) ;CLEAR LP20 RAM
MOV #LPLINI!LPRERR,(R5)
MOV #-1000,R0 ;LOCATION COUNT
MOVB #LPPENB,(R5) ;PARENB & NOT GO
2$: CLR LPRAMD(R5) ;CLEAR
INC LPCBUF(R5) ;INCREMENT ADDRESS
INC R0 ;COUNT IT
BNE 2$ ;IF NOT DONE, GO BACK
CLC ;COMPLETED, C-BIT CLEAR RETURN
RTS PC
3$: SEC ;ERROR, C-BIT SET RETURN
RTS PC
.SBTTL CONSOLE TELETYPE FUNCTIONS
$TP: MOV #$TPLIN,R5 ;SET TTY PAGE LENGTH
BR $TPW
$TW: MOV #$PGWID,R5 ;SET TTY PAGE WIDTH
$TPW: TTISDL
BCS $PARAM
TTIDEC ;SPECIFIED IN DECIMAL
BCS $DECN ;WASNT A DECIMAL NUMBER
MOV R0,(R5) ;SET IT UP
$TPWF: JMP $CONSL ;RETURN TO CONSOLE FOR NEXT COMMAND
;TTY FILL CHARACTER PARAMETER
$TF: TTISDO
CMP R0,#5 ;CHECK FILL PARAMETER UPPER LIMIT
BGT $FILPL
MOV R0,$TTYFL ;SET TTY FILL PARAMETER
BR $TPWF
;MESSAGES TO OPERATOR
$DECN:
$FILPL:
$OCTN:
$PARAM: JMP $PARA
.SBTTL KLINIK FIELD SERVICE REMOTE DIAGNOSTICS ENABLE
.KLINIK:CMP #"IN,$INBUF+2
BNE 2$
CMP #"IK,$INBUF+4
BNE 2$
TST DL11EFLG ;PRESENTLY ENABLED ?
BEQ 1$ ;NO
KLUNK=.
CLR DL11EFLG ;YES, CLEAR IT
PMSG <KLINIK CLEARED>
JMP $CNTLC
1$: CLR @$FSTKS ;INITIALIZE
BIS #DLDTR!DLRTS,@$FSTKS ;SET DATA TERMINAL READY
BIT #DLCTS,@$FSTKS ;DO WE HAVE CLEAR TO SEND ?
BEQ FSDISC ;NO
COM DL11EFLG ;ENABLE KLINIK
PMSG <KLINIK ENABLED>
JMP $CNTLC
2$: JMP $CMDER
;DL11E DISCONNECT, CLEAR TO SEND NOT SET
FSDISC: CLR DL11EFLG
PMSG <\DL11E NOT CLR TO SEND, >
BR KLUNK